/*题解做法，贪心+单调栈变形，存下每个数字最后出现的位置。
然后向答案序列中填数。如果出现过就略过，反之判断跟答案序列最后一个数得大小关系，如果大于直接放进去。如果小于并且后面还有答案序列的最后一个数出现，就删除。
循环以上过程找到最后即可。
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define mp make_pair
const int maxn = 2e5+10;
const int mod = 1e9+7;
const int INF = 0x3f3f3f3f;
int d[4][2]={1,0,0,1,-1,0,0,-1};
int main() {
    ios::sync_with_stdio(0);
    #ifdef Uncle_drew
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #else
    #endif
    int n,k;
    cin>>n>>k;
    vector<int> a(n+1),ans,vis(n+1),pos(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        pos[a[i]]=i;
    }
    for(int i=1;i<=n;i++){
        if(vis[a[i]])   continue;
        while(ans.size()>0&&a[i]<ans.back()&&i<pos[ans.back()]){
            vis[ans.back()]=0;
            ans.pop_back();
        }
        ans.pb(a[i]);
        vis[a[i]]=1;
    }
    for(auto i :ans){
        if(i!=ans.back())
        	cout<<i<<" ";
        else
            cout<<i<<endl;
    }
    return 0;
}